package com.atguigu.controller;

import com.atguigu.bean.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

import javax.servlet.http.HttpServletRequest;

import static org.springframework.web.bind.annotation.RequestMethod.POST;

/**
 * @author wk
 * @create 2021-06-04 21:55
 */
@Controller
public class TestController {
    @RequestMapping(
            value = {"/test","/testRequestMapping"},
            method = {RequestMethod.GET, POST},
            params = {"username=admin","password=123456"}

    )
    public String test() {
        return "success";
    }


    /**
     * 通过原始的servlet获取请求参数
     * @param request
     * @return
     */
    @RequestMapping("/testRequestParamByServlet")
    public String testRequestParamByServlet(HttpServletRequest request){
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        System.out.println("username："+username+"password："+password);
        return "success";
    }

    /**
     * 根据处理器的参数获取请求参数
     * @param username
     * @param password
     * @return
     */
    @RequestMapping("/testRequestParamByHandlerParam")
    public String testRequestParamByHandlerParam(String username,String password){
        System.out.println("username："+username+"password："+password);
        return "success";
    }

    /**
     * 测试@RequestParam注解的三个属性值
     * value:指定为处理器中的参数赋值的请求参数名
     * required：设置是否必须要传输value属性中规定的参数，默认为true，如果不传输且defaultValue属性未设置，则会报400错误，
     * 显示value属性设置的参数not present ,如果设置为false，则会给处理器中的参数赋值null
     * defaultValue：设置一个默认值，当value属性所设置的参数未进行传值时，使用此属性设置的值
     * @return
     */
    @RequestMapping("/testParamField")
    public String testParamField(@RequestParam(value = "user_name" ,required = false ,defaultValue = "詹姆斯")String username,String password){
        System.out.println("username："+username+"password："+password);
        return "success";
    }
    @RequestMapping("/testEncoding")
    public String testEncoding(@RequestParam("username") String username,String password){
        System.out.println(username+"\t"+password);
        return "success";
    }

    /**
     * 测试ant风格的路径
     * ?：表示输入任意单个字符
     * *：表示输入任意多个字符
     * **：表示多层目录
     * @return
     */
    // @RequestMapping("/testAnt?test")
    @RequestMapping("/testAnt*test")
    public String testAnt(){
        return "success";
    }

    /**
     * 测试rest风格 路径中的占位符
     * /testRest/1001/杜兰特路径中以这种方式传递数据
     * @return
     */
    @RequestMapping("/testRest/{id}/{username}")
    public String testRest(@PathVariable("id")Integer id,@PathVariable("username")String username){
        System.out.println("id:"+id+"username:"+username);
        return "success";
    }

    /**
     * 可以在处理器的参数位置设置一个实体类类型的形参，此时若浏览器传输的请求参数的参数名和实体类中的属性名一致，
     * 此时请求参数就会为此属性赋值
     * @param user
     * @return
     */
    @RequestMapping("/testPOJO")
    public String testPojo(User user){
        System.out.println(user);
        return "success";
    }
}
